const http = require('http');
const url = require('url');
const fs = require('fs');
//静态文件的缓存
//缓存：强制缓存（不会再次向服务器发起请求），对比缓存、协商缓存
const server = http.createServer(()=>{
    let {pathname,query} = url.parse(req.url,true);
    //如果返回是一个html
    //强制缓存 针对浏览器第一次缓存是不走强缓存的
    let filePath = pathname.join(__dirname,'public',pathname);
    //强制缓存，不会对首次访问的来路径做处理，后续的资源10s内不会在请求服务器
    //设置缓存的二进制文件

    //Cache-Control no-cache:每次都向服务器发请求，会存到浏览器的缓存中
    //Cache-Control no-store 每次都想服务器要，但是不会缓存到浏览器（真正无缓存）
    //如果服务器每次都返回最新的那么 还是会用最新的内容

    //强制缓存 需要根据不同的类型设置缓存时间
    res.setHeader('cache-control','max-age=10');
    res.setHeader('Expires',new Date(Date.now()+10*1000).toGMTString());//绝对事件
    //最后修改时间可能变化了 但是内容没有变化。Etag(指纹)
    fs.stat(filePath,function (err,statObj) {
        if(err){
            res.statusCode = 404;
            res.end('NOT FOUND');
        }else{
            if(statObj.isFile()){
                if(req.headers['if-none-match']===etag){
                    res.statusCode = 304;
                    res.end();
                }
                let content = fs.readFileSync(filePath);
                let etag = crypto.createHash('md5').update()
                res.setHeader('Content-Type',mine.getType(filePath)+';charset=utf-8');
                fs.createReadStream(filePath,'index.html').pipe(res);
            }else{
                let htmlPath = path.join();
            }
        }
    })
})
server.listen(3000,()=>{
    console.log(`server start 3000`);
})